import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
import eslintPlugin from 'vite-plugin-eslint'
import viteCompression from 'vite-plugin-compression'

// https://vitejs.dev/config/
export default defineConfig(({ command, mode }) => {
  console.info('define config...................................')
  console.info('COMMAND:', command, ', MODE:', mode, ', IsDevelopment', (command === 'serve'))
  console.info('process.cwd()', process.cwd())

  const env = loadEnv(mode, process.cwd(), '')
  console.info('运行的端口: ', env.VITE_PORT)
  console.info('应用名称: ', env.VITE_GLOB_APP_NAME)
  console.info('URL: ', import.meta.url)
  console.info('define config................................end...')
  return {
    base: env.VITE_APP_BASE_URL || './', // 开发或生产环境服务的公共基础路径
    // 默认vite只会暴露VITE开头变量。此时可以在其他文件通过import.meta.env.变量名获取环境变量
    envPrefix: ['VITE', 'VUE'], // 环境变量前缀,默认只会暴露VITE开头变量，定义后可暴露VUE开头变量
    optimizeDeps: {
      force: false // 强制进行依赖预构建
    },
    server: {
      host: true,       // 监听所有地址, '0.0.0.0'
      port: 7000,       // 监听端口
      strictPort: true, // 设置为false，端口被占用会直接退出
      cors: true,       // 为开发服务器配置 CORS。默认启用并允许任何源，传递一个 选项对象 来调整行为或设为 false 表示禁用。
      headers: {},      // 指定服务端响应的headers信息
      proxy: {
        '/api': {
          target: 'http://localhost:9009',
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/api/, '/console')
        }
      },
      hmr: {
        overlay: false
      }
    },
    // 打包配置
    build: {
      sourcemap: true,
      outDir: 'build', // 打包文件的输出目录
      assetsDir: 'static', // 静态资源的存放目录
      assetsInlineLimit: 4096, // 图片转 base64 编码的阈值
      rollupOptions: {
        output: {
          // entryFileNames: `[name].${timestamp}.js`,
          // chunkFileNames: `[name].${timestamp}.js`,
          // // css文件名
          // assetFileNames: `[name].${timestamp}.[ext]`
          // // 比如你想构建出来的css为dist/index.css，那么你可以这样
          // //  assetFileNames: `index.[ext]`
          chunkFileNames: 'static/js1/[name]-[hash].js',
          entryFileNames: 'static/js2/[name]-[hash].js',
          assetFileNames: 'static/[ext]/[name]-[hash].[ext]'
        },
        input: { // 设置双页面（双入口）的方法[]
          main: resolve(__dirname, 'index.html')
          // nested: resolve(__dirname, 'project.html')
        },
        brotliSize: false, // 不统计
        target: 'esnext',
        minify: 'esbuild' // 混淆器，terser构建后文件体积更小
      }
    },
    resolve: {
      alias: {
        'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js',
        '@': resolve(__dirname, './src') // 路径别名
      },
      extensions: ['.js', '.ts', '.json'] // 导入时想要省略的扩展名列表
    },
    plugins: [vue(),
      viteCompression({
        // 开启gzip模式
        verbose: true, // 是否在控制台输出压缩结果，默认为 true
        disable: false, // 是否禁用压缩，默认为 false
        threshold: 1024000, // 对大于 1mb 的文件进行压缩
        algorithm: 'gzip', // 采用的压缩算法，默认是 gzip
        ext: '.gz', // 生成的压缩包后缀
        deleteOriginFile: false // 压缩后是否删除原文件，默认为 false
      }),
      eslintPlugin({
        include: ['src/**/*.js', 'src/**/*.vue', 'src/*.js', 'src/*.vue']
      })
    ],
    css: {
      preprocessorOptions: {
        less: {
          charset: false,
          modifyVars: {
            // 'primary-color': '#C0E11D',
            // 'link-color': '#1DA57A',
            // 'border-radius-base': '2px',
            // 'layout-body-background': '#f5f5f5'
            // 引入全局基础less变量
            hack: `true; @import (reference) "${resolve('src/assets/style/variable.less')}";`
          },
          javascriptEnabled: true,
          // less文件路径
          //additionalData: '@import "src/assets/style/variable.less";',
          // 引入全局基础less变量
          //hack: `true; @import (reference) "${resolve('src/assets/theme/variable.less')}";`
        }
      }
    },
    clearScreen: true, // vite清屏不清除控制台打印的信息
    logLevel: 'info'
  }
})
